
package newMatrixC;
import java.util.*;
/**
 *
 * Exercise 5.4
 * @author Katrin Baryshnikova
 */
public class MakeC {
    /**
     * 
     * @param args
     */
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("n = ");
        int n = in.nextInt();
        Integer[][] oldC = makeMatrix(n, n);
        printMatrix(oldC, "Old C");
        Integer[][] C = rebuildMatrix(oldC);
        printMatrix(C, "New C");
    }
    /**
     * Вычисляет новую матрицу из исходной: Cij = yтi xj , где yтi – i-ая строка,
     * а  xj – j-й столбец исходной матрицы
     * @param x исходная матрица
     * @return полученную новую матрицу того же размера что и исходная
     */
    public static Integer[][] rebuildMatrix(Integer[][] x){
        int n = x.length;
        Integer[][] answ = new Integer[n][n];
        for(int i = 0; i<n; i++){
            for(int j = 0; j<n; j++){
                answ[i][j] = 0;
                for(int k = 0; k<n; k++) {
                    answ[i][j] += x[i][k]*x[k][j];                   
                }
            }
        }
        return answ;
    }
    /**
     * Создает матрицу
     * @param n заданное количество строк в создаваемой матрице
     * @param m заданное количество столбцов в создаваемой матрице
     * @return полученную матрицу
     */
    public static Integer[][] makeMatrix(int n, int m) {
        Integer[][] x = new Integer[n][m];
        Random rn = new Random();
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                x[i][j] = rn.nextInt(5);
            }
        }
        return x;
    }
    /**
     * Печатает матрицу 
     * @param x матрица для печати
     * @param s строка пояснения
     */
    public static void printMatrix(Integer[][] x, String s) {
        System.out.println("Matrix " + s + ":");
        for (int i = 0; i < x.length; i++) {
            for (int j = 0; j < x[i].length; j++) {
                System.out.print(x[i][j] + " ");
            }
            System.out.println();
        }        
    }
}
